perm filename DIFFIE[CMP,SYS] blob sn#132197 filedate 1974-11-17 generic text, type T, neo UTF8
(SPECIAL NN SYMG NUMG UNSPECFOUNDG EQTABLEG INEQTABLEG SEENG
	 MAXSEENTEMPG MAXASSIGNG MISMATCHG REMOVEMISMATCHMODE
	 MISMATCHPARAMS REDFORMPATHS)

(DEFPROP DIFFIE
 (LAMBDA (CANSYMNUM REDSYM REDNUM DSCR)
  (COND
   ((NULL REDSYM) NN)
   (T (SETQ SYMG (CAR CANSYMNUM))
      (SETQ NUMG (CDR CANSYMNUM))
      (SETQ UNSPECFOUNDG NIL)
      (COND
       ((AND (CNDFORM REDSYM)
	     (MATCHNODE	REDSYM
			REDNUM
			(SETQ EQTABLEG (CAR DSCR))
			(SETQ INEQTABLEG (CADR DSCR))
			(CDDR DSCR)))
	(COND (UNSPECFOUNDG (SETQ REDSYM (CAR UNSPECFOUNDG))
			    (SETQ REDNUM (CDR UNSPECFOUNDG))
			    (SETQ UNSPECFOUNDG NIL))
	      (T NIL))
	((LAMBDA (CANSYM INEQTABLE SEEN)
	  ((LAMBDA (CONCNUM ALTNUM PARAMS EQTABLE)
	    ((LAMBDA (TRUECASEDSCR FALSECASEDSCR)
	      (MAKECNDFORM (CAR REDSYM)
			   (CAR REDNUM)
			   (MATCH (REMOVEDUPS CANSYM
					      CONCNUM
					      (CDDR TRUECASEDSCR)
					      (CAR TRUECASEDSCR)
					      (CADR TRUECASEDSCR))
				  (CADDR REDSYM)
				  (CADDR REDNUM)
				  TRUECASEDSCR)
			   (MATCH (REMOVEDUPS CANSYM
					      ALTNUM
					      (CDDR FALSECASEDSCR)
					      (CAR FALSECASEDSCR)
					      (CADR FALSECASEDSCR))
				  (CDDDR REDSYM)
				  (CDDDR REDNUM)
				  FALSECASEDSCR)))
	     (PROCESSTRUECASE PARAMS
			      (CAAR REDSYM)
			      EQTABLE
			      (SETQ INEQTABLEG INEQTABLE)
			      SEEN)
	     (PROCESSFALSECASE PARAMS
			       (CAAR REDSYM)
			       (SETQ EQTABLEG EQTABLE)
			       (SETQ INEQTABLEG INEQTABLE)
			       SEEN)))
	   (BREADTHTODEPTH NUMG
			   (SETQ MAXSEENTEMPG (SETQ MAXASSIGNG
						    (CAAR REDNUM)))
			   (LIST (CONS (CAAR REDNUM) (CAAR REDNUM))
				 (CONS 0 0)))
	   (BREADTHTODEPTH NUMG
			   (SETQ MAXSEENTEMPG (CAAR REDNUM))
			   (LIST (CONS (CAAR REDNUM) MAXASSIGNG)
				 (CONS 0 0)))
	   (GETUPDATEPARAMS (CAR REDSYM) (CAR REDNUM))
	   EQTABLEG))
	 SYMG
	 (CADR DSCR)
	 (CONS (CAAR REDNUM) SEENG)))
       (MISMATCHG (SETQ MISMATCHG NIL) (CONS SYMG NUMG))
       ((OR (NULL REMOVEMISMATCHMODE)
	    (ATOM REDSYM)
	    (NULL MISMATCHPARAMS)
	    (NOT (EQ (COND ((EQ (CAR REDSYM) (QUOTE FN))
			    (CAADR REDNUM))
			   (T (CAR REDNUM)))
		     (CADAAR MISMATCHPARAMS))))
	(MATCHTERMINALNODE REDSYM
			   REDNUM
			   (SETQ EQTABLEG (CAR DSCR))
			   (CADR DSCR)
			   (CDDR DSCR))
	(SETQ MISMATCHG NIL)
	(CONS SYMG NUMG))
       (T (MISMATCHCONTROLLER CANSYMNUM
			      REDSYM
			      REDNUM
			      DSCR
			      REDFORMPATHS))))))
 EXPR)